Subclase numpy.ndarray es una decisión arquitectónica de alto nivel utilizada para crear estructuras de datos específicas del dominio que encapsulan metadatos (como unidades, coordenadas o tasas de muestreo) junto con los datos numéricos crudos. A diferencia de las clases estándar de Python, los objetos de NumPy a menudo se crean sin llamar a __init__.
El tríada de inicialización
Los arquitectos deben tener en cuenta tres caminos distintos de instanciación donde se salta el constructor estándar:
- Construcción explícita: Usando el nombre de la clase (manejado por
__new__). - Casting de vista: Reinterpretar un arreglo existente como su subclase.
- Nuevo desde plantilla: Creando un corte o copia de una instancia existente de subclase.
El método especializado __array_finalize__ es el punto de convergencia donde los metadatos se sincronizan entre estos caminos.
Fragilidad comportamental
El subclase crea un acoplamiento estrecho con la API C de NumPy. Operaciones que devuelven escalares (por ejemplo, np.mean()) a menudo "eliminan" la identidad de la subclase, volviendo a un tipo estándar ndarray. La gestión de metadatos es por tanto un riesgo constante si no se maneja cuidadosamente mediante transiciones de estado.
isinstance(obj, np.ndarray). De lo contrario, Composición (envolviendo un arreglo) es más seguro.